#ifndef KPEXTOPIMGF32C1ROI_H
#define KPEXTOPIMGF32C1ROI_H

#include "kpextVkContext.h"
#include "kpextBaseCompute.h"

namespace kpext {

/**
 * @brief 单通道32位单精度浮点数图像 感兴趣区域(ROI) 提取操作
 */
class OpImgF32C1ROI : public BaseCompute{
public:
    explicit OpImgF32C1ROI(kpextVkContext * ctx);

    virtual ~OpImgF32C1ROI() override;

    /**
     * @brief  重新构建计算管线及相关资源
     * @param cols  输入二维图像的列数
     * @param rows  输入二维图像的行数
     * @param roi_cols  输出二维图像的列数, 感兴趣区域(ROI)宽
     * @param roi_rows  输出二维图像的行数, 感兴趣区域(ROI)高
     * @param roi_x  水平偏移, 感兴趣区域(ROI)左上角x
     * @param roi_y  垂直偏移, 感兴趣区域(ROI)左上角y
     * @param inbuf  输入缓冲
     * @param outbuf  输出缓冲
     */
    virtual void rebuild(int cols,
                         int rows,
                         int roi_cols,
                         int roi_rows,
                         int roi_x,
                         int roi_y,
                         std::shared_ptr<BaseBuffer> inbuf,
                         std::shared_ptr<BaseBuffer> outbuf
                         );

protected:

    /**
     * @brief 计算着色器的work group size
     */
    std::array<uint32_t, 3> m_workGroupSize;

    /**
     * @brief  感兴趣区域(ROI)左上角坐标
     */
    uint32_t m_roi_x, m_roi_y;

    /**
     * @brief  感兴趣区域(ROI)尺寸
     */
    uint32_t m_roi_cols, m_roi_rows;

private:
    using BaseCompute::rebuild;

};  // class kpext::OpImgF32C1Flip

} // namespace kpext

#endif // KPEXTOPIMGF32C1ROI_H
